package com.aseo.model.entity.hibernate;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

@Entity(name = "com.aseo.model.entity.hibernate.Reclamador")
@Table(name = "reclamos.reclamador")
public class Reclamador implements Serializable {

	private static final long serialVersionUID = 6216145091421299137L;

	@SequenceGenerator(name = "reclamos.reclamador_reclamador_id_seq", sequenceName = "reclamos.reclamador_reclamador_id_seq")
    @GeneratedValue(generator = "reclamos.reclamador_reclamador_id_seq")
	@Id
    @Basic(optional = false)
    @Column(name = "reclamador_id")
    private Long reclamadorId;
	
	@NotEmpty(message="Es necesario el nombre del Reclamador")
	@Basic(optional = false)
    @Column(name = "nombres")
    private String nombres;
    
	@NotNull(message="Es necesario que indique la nacionalidad del reclamador")
	@JoinColumn(name = "tipo_identificacion_id", referencedColumnName = "tipo_identificacion_id")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private TipoIdentificacion tipoIdentificacionId;
	
	@NotEmpty(message="Es necesario el numero de identificacion")
	@Column(name = "numero_identificador")
    private String numeroIdentificador;
    
	@Column(name = "telefono_uno")
    private String telefonoUno;
	
	@Column(name = "telefono_uno_prefijo")
	private String telefonoUnoPrefijo;
    
	@Column(name = "telefono_dos")
    private String telefonoDos;
	
	@Column(name = "telefono_dos_prefijo")
	private String telefonoDosPrefijo;
    
	@Column(name = "correo_electronico")
    private String correoElectronico;
    
	@Basic(optional = false)
    @Column(name = "fecha_registro")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaRegistro;
    
	@Basic(optional = false)
    @Column(name = "fecha_actualizacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaActualizacion;
    
	@Basic(optional = false)
    @Column(name = "estado")
    private int estado;
    
	@NotNull(message="Es necesario el tipo del reclamador")
	@JoinColumn(name = "tipo_reclamador_id", referencedColumnName = "tipo_reclamador_id")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private TipoReclamador tipoReclamadorId;

    public Reclamador() {
    }

    public Reclamador(Long reclamadorId) {
        this.reclamadorId = reclamadorId;
    }

    public Reclamador(Long reclamadorId, String nombres, Date fechaRegistro, Date fechaActualizacion, int estado) {
        this.reclamadorId = reclamadorId;
        this.nombres = nombres;
        this.fechaRegistro = fechaRegistro;
        this.fechaActualizacion = fechaActualizacion;
        this.estado = estado;
    }

    public Long getReclamadorId() {
        return reclamadorId;
    }

    public void setReclamadorId(Long reclamadorId) {
        this.reclamadorId = reclamadorId;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getNumeroIdentificador() {
        return numeroIdentificador;
    }

    public void setNumeroIdentificador(String numeroIdentificador) {
        this.numeroIdentificador = numeroIdentificador;
    }

    public String getCorreoElectronico() {
        return correoElectronico;
    }

    public void setCorreoElectronico(String correoElectronico) {
        this.correoElectronico = correoElectronico;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public Date getFechaActualizacion() {
        return fechaActualizacion;
    }

    public void setFechaActualizacion(Date fechaActualizacion) {
        this.fechaActualizacion = fechaActualizacion;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public TipoIdentificacion getTipoIdentificacionId() {
        return tipoIdentificacionId;
    }

    public void setTipoIdentificacionId(TipoIdentificacion tipoIdentificacionId) {
        this.tipoIdentificacionId = tipoIdentificacionId;
    }

    public TipoReclamador getTipoReclamadorId() {
        return tipoReclamadorId;
    }

    public void setTipoReclamadorId(TipoReclamador tipoReclamadorId) {
        this.tipoReclamadorId = tipoReclamadorId;
    }
    
	public String getTelefonoUno() {
		return telefonoUno;
	}

	public void setTelefonoUno(String telefonoUno) {
		this.telefonoUno = telefonoUno;
	}

	public String getTelefonoUnoPrefijo() {
		return telefonoUnoPrefijo;
	}

	public void setTelefonoUnoPrefijo(String telefonoUnoPrefijo) {
		this.telefonoUnoPrefijo = telefonoUnoPrefijo;
	}

	public String getTelefonoDos() {
		return telefonoDos;
	}

	public void setTelefonoDos(String telefonoDos) {
		this.telefonoDos = telefonoDos;
	}

	public String getTelefonoDosPrefijo() {
		return telefonoDosPrefijo;
	}

	public void setTelefonoDosPrefijo(String telefonoDosPrefijo) {
		this.telefonoDosPrefijo = telefonoDosPrefijo;
	}

	@Override
    public int hashCode() {
        int hash = 0;
        hash += (reclamadorId != null ? reclamadorId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {

    	if (!(object instanceof Reclamador)) return false;

    	Reclamador other = (Reclamador) object;
        if ((this.reclamadorId == null && other.reclamadorId != null) 
         || (this.reclamadorId != null && !this.reclamadorId.equals(other.reclamadorId))) return false;

        return true;
    }

    @Override
    public String toString() {
        return "com.aseo.model.entity.hibernate.Reclamador[reclamadorId=" + reclamadorId + "]";
    }

}
